<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>29.2. Memory Manager</title>
<link rel="stylesheet" href="dbstyle.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="Programmer's Reference Guide">
<link rel="up" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="prev" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="next" href="zend.memory.memory-objects.html" title="29.3. Memory Objects">
<link rel="chapter" href="introduction.html" title="Chapter 1. Introduction to Zend Framework">
<link rel="chapter" href="zend.acl.html" title="Chapter 2. Zend_Acl">
<link rel="chapter" href="zend.auth.html" title="Chapter 3. Zend_Auth">
<link rel="chapter" href="zend.cache.html" title="Chapter 4. Zend_Cache">
<link rel="chapter" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="chapter" href="zend.console.getopt.html" title="Chapter 6. Zend_Console_Getopt">
<link rel="chapter" href="zend.controller.html" title="Chapter 7. Zend_Controller">
<link rel="chapter" href="zend.currency.html" title="Chapter 8. Zend_Currency">
<link rel="chapter" href="zend.date.html" title="Chapter 9. Zend_Date">
<link rel="chapter" href="zend.db.html" title="Chapter 10. Zend_Db">
<link rel="chapter" href="zend.debug.html" title="Chapter 11. Zend_Debug">
<link rel="chapter" href="zend.dojo.html" title="Chapter 12. Zend_Dojo">
<link rel="chapter" href="zend.dom.html" title="Chapter 13. Zend_Dom">
<link rel="chapter" href="zend.exception.html" title="Chapter 14. Zend_Exception">
<link rel="chapter" href="zend.feed.html" title="Chapter 15. Zend_Feed">
<link rel="chapter" href="zend.filter.html" title="Chapter 16. Zend_Filter">
<link rel="chapter" href="zend.form.html" title="Chapter 17. Zend_Form">
<link rel="chapter" href="zend.gdata.html" title="Chapter 18. Zend_Gdata">
<link rel="chapter" href="zend.http.html" title="Chapter 19. Zend_Http">
<link rel="chapter" href="zend.infocard.html" title="Chapter 20. Zend_InfoCard">
<link rel="chapter" href="zend.json.html" title="Chapter 21. Zend_Json">
<link rel="chapter" href="zend.layout.html" title="Chapter 22. Zend_Layout">
<link rel="chapter" href="zend.ldap.html" title="Chapter 23. Zend_Ldap">
<link rel="chapter" href="zend.loader.html" title="Chapter 24. Zend_Loader">
<link rel="chapter" href="zend.locale.html" title="Chapter 25. Zend_Locale">
<link rel="chapter" href="zend.log.html" title="Chapter 26. Zend_Log">
<link rel="chapter" href="zend.mail.html" title="Chapter 27. Zend_Mail">
<link rel="chapter" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="chapter" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="chapter" href="zend.mime.html" title="Chapter 30. Zend_Mime">
<link rel="chapter" href="zend.openid.html" title="Chapter 31. Zend_OpenId">
<link rel="chapter" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="chapter" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="zend.registry.html" title="Chapter 34. Zend_Registry">
<link rel="chapter" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="chapter" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="zend.server.html" title="Chapter 37. Zend_Server">
<link rel="chapter" href="zend.service.html" title="Chapter 38. Zend_Service">
<link rel="chapter" href="zend.session.html" title="Chapter 39. Zend_Session">
<link rel="chapter" href="zend.soap.html" title="Chapter 40. Zend_Soap">
<link rel="chapter" href="zend.test.html" title="Chapter 41. Zend_Test">
<link rel="chapter" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="chapter" href="zend.timesync.html" title="Chapter 43. Zend_TimeSync">
<link rel="chapter" href="zend.translate.html" title="Chapter 44. Zend_Translate">
<link rel="chapter" href="zend.uri.html" title="Chapter 45. Zend_Uri">
<link rel="chapter" href="zend.validate.html" title="Chapter 46. Zend_Validate">
<link rel="chapter" href="zend.version.html" title="Chapter 47. Zend_Version">
<link rel="chapter" href="zend.view.html" title="Chapter 48. Zend_View">
<link rel="chapter" href="zend.xmlrpc.html" title="Chapter 49. Zend_XmlRpc">
<link rel="appendix" href="requirements.html" title="Appendix A. Zend Framework Requirements">
<link rel="appendix" href="coding-standard.html" title="Appendix B. Zend Framework Coding Standard for PHP">
<link rel="appendix" href="copyrights.html" title="Appendix C. Copyright Information">
<link rel="index" href="the.index.html" title="Index">
<link rel="subsection" href="zend.memory.memory-manager.html#zend.memory.memory-manager.creation" title="29.2.1. Creating a Memory Manager">
<link rel="subsection" href="zend.memory.memory-manager.html#zend.memory.memory-manager.objects-management" title="29.2.2. Managing Memory Objects">
<link rel="subsection" href="zend.memory.memory-manager.html#zend.memory.memory-manager.settings" title="29.2.3. Memory Manager Settings">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader"><table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">29.2. Memory Manager</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="zend.memory.html">Prev</a> </td>
<th width="60%" align="center">Chapter 29. Zend_Memory</th>
<td width="20%" align="right"> <a accesskey="n" href="zend.memory.memory-objects.html">Next</a>
</td>
</tr>
</table></div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zend.memory.memory-manager"></a>29.2. Memory Manager</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.memory.memory-manager.creation"></a>29.2.1. Creating a Memory Manager</h3></div></div></div>
<p>
            You can create new a memory manager
            (<code class="code">Zend_Memory_Manager</code> object) using the
            <code class="code">Zend_Memory::factory($backendName [, $backendOprions])</code>
            method.
        </p>
<p>
            The first argument <code class="code">$backendName</code> is a string that
            names one of the backend implementations supported by Zend_Cache.
        </p>
<p>
            The second argument <code class="code">$backendOptions</code> is an optional
            backend options array.
        </p>
<pre class="programlisting">&lt;?php
$backendOptions = array(
    'cache_dir' =&gt; './tmp/' // Directory where to put the swapped memory blocks
);

$memoryManager = Zend_Memory::factory('File', $backendOptions);
        </pre>
<p>
            Zend_Memory uses <a href="zend.cache.backends.html" title="4.4. Zend_Cache backends">Zend_Cache backends</a>
            as storage providers.
        </p>
<p>
            You may use the special name '<code class="code">None</code>' as a backend name,
            in addition to standard Zend_Cache backends.

            </p>
<pre class="programlisting">&lt;?php
$memoryManager = Zend_Memory::factory('None');
            </pre>
<p>
        </p>
<p>
            If you use '<code class="code">None</code>' as the backend name, then the memory
            manager never swaps memory blocks.  This is useful if you know that
            memory is not limited or the overall size of objects never reaches
            the memory limit.
        </p>
<p>
            The '<code class="code">None</code>' backend doesn't need any option specified.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.memory.memory-manager.objects-management"></a>29.2.2. Managing Memory Objects</h3></div></div></div>
<p>
            This section describes creating and destroying objects in the
            managed memory, and settings to control memory manager behavior.
        </p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
<a name="zend.memory.memory-manager.objects-management.movable"></a>29.2.2.1. Creating Movable Objects</h4></div></div></div>
<p>
                Create movable objects (objects, which may be swapped) using
                the <code class="code">Zend_Memory_Manager::create([$data])</code> method:
                </p>
<pre class="programlisting">&lt;?php
$memObject = $memoryManager-&gt;create($data);
                </pre>
<p>

            </p>
<p>
                The <code class="code">$data</code> argument is optional and used to
                initialize the object value.  If the <code class="code">$data</code>
                argument is omitted, the value is an empty string.
            </p>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
<a name="zend.memory.memory-manager.objects-management.locked"></a>29.2.2.2. Creating Locked Objects</h4></div></div></div>
<p>
                Create locked objects (objects, which are not swapped) using
                the <code class="code">Zend_Memory_Manager::createLocked([$data])</code> method:
                </p>
<pre class="programlisting">&lt;?php
$memObject = $memoryManager-&gt;createLocked($data);
                </pre>
<p>
            </p>
<p>
                The <code class="code">$data</code> argument is optional and used to
                initialize the object value.  If the <code class="code">$data</code>
                argument is omitted, the value is an empty string.
            </p>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
<a name="zend.memory.memory-manager.objects-management.destruction"></a>29.2.2.3. Destroying Objects</h4></div></div></div>
<p>
                Memory objects are automatically destroyed and removed from
                memory when they go out of scope:

                </p>
<pre class="programlisting">&lt;?php
function foo()
{
    global $memoryManager, $memList;

    ...

    $memObject1 = $memoryManager-&gt;create($data1);
    $memObject2 = $memoryManager-&gt;create($data2);
    $memObject3 = $memoryManager-&gt;create($data3);

    ...

    $memList[] = $memObject3;

    ...

    unset($memObject2); // $memObject2 is destroyed here

    ...
    // $memObject1 is destroyed here
    // but $memObject3 object is still referenced by $memList and is not destroyed
}
                </pre>
<p>
            </p>
<p>
                This applies to both movable and locked objects.
            </p>
</div>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.memory.memory-manager.settings"></a>29.2.3. Memory Manager Settings</h3></div></div></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
<a name="zend.memory.memory-manager.settings.memory-limit"></a>29.2.3.1. Memory Limit</h4></div></div></div>
<p>
                Memory limit is a number of bytes allowed to be used by loaded
                movable objects.
            </p>
<p>
                If loading or creation of an object causes memory usage to
                exceed of this limit, then the memory manager swaps some other
                objects.
            </p>
<p>
                You can retrieve or set the memory limit setting using the
                <code class="code">getMemoryLimit()</code> and <code class="code">setMemoryLimit($newLimit)</code>
                methods:
                </p>
<pre class="programlisting">&lt;?php
$oldLimit = $memoryManager-&gt;getMemoryLimit();  // Get memory limit in bytes
$memoryManager-&gt;setMemoryLimit($newLimit);     // Set memory limit in bytes
                </pre>
<p>
            </p>
<p>
                A negative value for memory limit means 'no limit'.
            </p>
<p>
                The default value is two-thirds of the value of
                '<code class="code">memory_limit</code>' in php.ini or 'no limit' (-1)
                if '<code class="code">memory_limit</code>' is not set in php.ini.
            </p>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
<a name="zend.memory.memory-manager.settings.min-size"></a>29.2.3.2. MinSize</h4></div></div></div>
<p>
                MinSize is a minimal size of memory objects, which may be
                swapped by memory manager.  The memory manager does not swap
                objects that are smaller than this value.  This reduces the
                number of swap/load operations.
            </p>
<p>
                You can retrieve or set the minimum size using the
                <code class="code">getMinSize()</code> and <code class="code">setMinSize($newSize)</code>
                methods:
                </p>
<pre class="programlisting">&lt;?php
$oldMinSize = $memoryManager-&gt;getMinSize();  // Get MinSize in bytes
$memoryManager-&gt;setMinSize($newSize);        // Set MinSize limit in bytes
                </pre>
<p>
            </p>
<p>
                The default minimum size value is 16KB (16384 bytes).
            </p>
</div>
</div>
</div>
<div class="navfooter"><table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="zend.memory.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="zend.memory.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="zend.memory.memory-objects.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 29. Zend_Memory </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> 29.3. Memory Objects</td>
</tr>
</table></div>
<div class="revinfo"></div>
</body>
</html>
